//在这个js中配置axios
import axios from "axios";
//解决bug 重复点击会报错.
//重写原型上的$router.push方法
/* 
from后面的内容
如果是有文件路径的内容，引入的是一个文件，可以在src中找到的文件
如果是没有文件路径例如axios/vuex ，引入的是一个插件，是在node_modules可以找到的

有路径的叫引入文件，没有路径的叫引入插件(引入资源)
*/
//初始化axios请求，参数是一个对象，可以配置一些信息
let http = axios.create({
  timeout: 5000,
  //请求的限时，每个请求不能超过5秒钟
});

//请求拦截器
http.interceptors.request.use((config) => {
  //config请求拦截器的配置
  let token = sessionStorage.getItem("token") || "";
  //如果缓存有东西，返回对应的内容，如果没有就返回空字符串
  if (token) {
    //用户已经登陆了，就把token值放到请求头里面去
    config.headers["x-token"] = token;
  }
  //记得操作完成以后，要return出去
  return config;
});
//响应拦截器
http.interceptors.response.use(
  (response) => {
    //这里的形参response就是后台返回的内容
    // console.log(response, "请求成功的数据");
    return response;
  },
  (error) => {
    console.log(error.response, "错误请求返回的内容");
    return Promise.reject(
      (function (resp) {
        console.group(
          `%c【代码${resp.status}: ${resp.data.msg}】`,
          "color:blue;font-size:15px;"
        );
        let inputdata = resp.config.data
          ? JSON.parse(resp.config.data)
          : undefined;
        let inputparams = resp.config.params ? resp.config.params : undefined;
        console.log(
          `%cPREVIEW:\n`,
          "color:green;font-weight:bold;font-size:18px",
          `Data:`,
          inputdata,
          `\n`,
          `Params:`,
          inputparams,
          `\n`,
          { Method: resp.config.method },
          `\n`,
          { Url: resp.config.url },
          `\n`,
          { Envir: process.env.NODE_ENV },
          `\n`,
          { Type: resp.config.headers["Content-Type"] },
          `\n`,
          { msg: resp.data.msg },
          `\n`,
          { status: resp.status },
          `\n`
        );
        console.groupEnd();
      })(error.response)
    );
  }
);
//暴露出去
export default http;
